package com.tbit.main.service;


import com.tbit.main.pojo.MachineAbnormal;
import com.tbit.main.pojo.OrderJob;

import java.util.List;
import java.util.Map;

/**
 * 异常
 *
 * @author Leon
 * 2019年11月16日 下午2:55:29
 */
public interface MachineAbnormalService {

    /**
     * 根据设备id查询
     *
     * @param machineId
     * @return
     */
    List<MachineAbnormal> getByMachineId(Integer machineId);

    /**
     * 查询所有
     *
     * @return
     */
    List<MachineAbnormal> getAll();

    /**
     * 根据设备id和类型查询
     *
     * @param machineId
     * @param abnormalType
     * @return
     */
    MachineAbnormal getByMachineIdAndType(Integer machineId, Integer abnormalType);

    /**
     * 批量根据设备id和类型查询
     *
     * @param machineIds
     * @param abnormalTypes
     * @return
     */
    List<Integer> getByMachineIdsIdAndType(List<Integer> machineIds, List<Integer> abnormalTypes);

    /**
     * 添加
     *
     * @param machineAbnormal
     */
    void insert(MachineAbnormal machineAbnormal);

    /**
     * 删除
     *
     * @param machineId
     * @param abnormalType
     */
    void del(Integer machineId, Integer abnormalType);

    /**
     * 删除
     *
     * @param machineIds
     * @param abnormalType
     */
    void deleteBatch(List<Integer> machineIds, Integer abnormalType);

    /**
     * 根据
     *
     * @param accountId
     * @param abnormalType
     */
    void delAccountId(Integer accountId, Integer abnormalType);

    /**
     * 根据车辆和类型分组
     *
     * @param accountId
     * @param abnormalType
     * @return
     */
    List<MachineAbnormal> groupByMachineIdAndType(Integer accountId, Integer abnormalType, String addTime);

    List<MachineAbnormal> groupByMachineIdAndListType(Integer accountId, List<Integer> abnormalType);

    /**
     * 根据车辆和类型
     *
     * @param accountId
     * @param abnormalType
     * @return
     */
    List<MachineAbnormal> groupMachineIdAndType(Integer accountId, Integer abnormalType, String addTime);

    List<MachineAbnormal> groupMachineIdAndListType(Integer accountId, List<Integer> abnormalType);

    List<MachineAbnormal> groupByMachineIdRegionIdAndType2(List<Integer> regionId, List<Integer> abnormalType);

    /**
     * 根据车辆和类型分组
     *
     * @param regionId
     * @param abnormalType
     * @return
     */
    List<MachineAbnormal> groupByMachineIdAndRegionId(List<Integer> regionId, Integer abnormalType, String addTime);

    /**
     * 根据车辆和类型
     *
     * @param regionId
     * @param abnormalType
     * @return
     */
    List<MachineAbnormal> groupMachineIdAndRegionId(List<Integer> regionId, Integer abnormalType, String addTime);

    /**
     * 根据类型查询
     *
     * @param abnormalType
     * @return
     */
    List<MachineAbnormal> getAccountIdType(Integer abnormalType, Integer accountId);

    /**
     * 根据类型查询
     *
     * @param abnormalType
     * @return
     */
    List<MachineAbnormal> getByType(List<Integer> abnormalType);

    /**
     * 定时任务根据id和时间查询
     *
     * @param orderJobList
     * @return
     */
    List<MachineAbnormal> getOrderJob(List<OrderJob> orderJobList);

    /**
     * 根据运营区域查询异常车辆
     *
     * @param accountId
     * @return
     */
    List<MachineAbnormal> getByAccountId(Integer accountId);

    /**
     * 根据运营区域查询异常车辆
     *
     * @param accountIds
     * @return
     */
    List<MachineAbnormal> getByAccountIds(List<Integer> accountIds);


    /**
     * 获取运营区域内的异常车辆数
     *
     * @return
     */
    List<Map<String, Object>> getGroupByAccountId();

    /**
     * 根据运营区域内的异常车辆数
     *
     * @return
     */
    Integer getByAccountIdCount(Integer accountId);

    /**
     * 批量新增
     *
     * @param machineId
     * @param abnormalType
     */
    void insertBatch(List<Integer> machineId, Integer abnormalType, String dateTime);

    /**
     * 根据异常类型查询
     *
     * @param abnormalType
     * @return
     */
    List<Integer> getByAbnormalType(Integer abnormalType);

    /**
     * 查看区域异常类型总数
     *
     * @return
     */
    List<Map<String, Object>> getAccountIdAndType();

    /**
     * 根据车辆和类型总数
     *
     * @param accountId
     * @param abnormalType
     * @return
     */
    Integer getAccountIdTypeCount(Integer accountId, Integer abnormalType);

    /**
     * 根据车辆批量查询
     *
     * @param machineIds
     * @return
     */
    List<MachineAbnormal> getByMachineIds(List<Integer> machineIds);
}
